因為我們還沒跟 Persistent Volume 串接起來,要透過 OpenStack 提供的 Cinder CSI Plugin 讓 K8s 可以動態建立 PV。
Cinder CSI Plugin 是 K8s 對於 OpenStack 所寫的擴充套件,可以用來動態建立 PV,讓 PVC 可以自動 Mount 上去。
接下來就一步一步完成。
這裡就仿照 Day 20 所寫的 Application Credentials 去建立,名稱就寫 Cinder CSI K8s
,角色就選擇 member
。
建立完成以後,就點擊 下載 clouds.yaml
,等一下會使用到裡面的內容。
這裡我們先來把 Kubernetes 官方提供的 OpenStack 相關套件 Repo 加入進去:
helm repo add cpo https://kubernetes.github.io/cloud-provider-openstack
helm repo update
然後把 cpo/openstack-cinder-csi
的 Values 預設內容變成檔案:
helm show values cpo/openstack-cinder-csi > values.yaml # 把 openstack-cinder-csi Chart 的預設值變成檔案
接下來就來把參數編輯上去
vim values.yaml
基本上上面的內容不需要做任何變動,往 .secret
欄位看
這裡可以填寫下載的 clouds.yaml
內容,可以照下面的參考網址做參數對應:https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/openstack-cloud-controller-manager/using-openstack-cloud-controller-manager.md#global
下面就給個範例設定那幾行的內容:
secret:
enabled: true
create: true
filename: cloud.conf
name: cinder-csi-cloud-config
data:
cloud.conf: |-
[Global]
auth-url="" # OpenStack Auth URL
application-credential-id="" # Credential ID
application-credential-secret="" # Credential Secret
region=RegionOne
建立完成後,就安裝進去吧,官方文件是建議安裝在 kube-system
的 Namespace 裡面,那這裡就照這方向進行:
helm install --namespace kube-system cinder-csi cpo/openstack-cinder-csi -f values.yaml
安裝成功就會說使用 StorageClass
這兩個 csi-cinder-sc-retain
跟 csi-cinder-sc-delete
這就可以使用 PV。
這裡就可以建立 PVC:
# 1. Save as `example-pvc.yaml`
# 2. In bash, `kubectl apply -f example-pvc.yaml`
# 3. If you want to remove, `kubectl delete -f example-pvc.yaml`
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pvc-cinderplugin
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-cinder-sc-delete
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /var/lib/www/html
name: csi-data-cinderplugin
volumes:
- name: csi-data-cinderplugin
persistentVolumeClaim:
claimName: csi-pvc-cinderplugin
readOnly: false
用 apply 套用設定:
kubectl apply -f example-pvc.yaml
稍等再檢查一下 PV 跟 PVC,就會發現他們已經 Bound 了
OpenStack 雲硬碟上也會有掛載硬碟到 VM 上
接下來就刪除它:
kubectl delete -f example-pvc.yaml
刪除後沒隔多久 PV 就會消失了,那是因為 StorageClass 選了 csi-cinder-sc-delete
,遇到 PVC 被刪除,PV 就會跟著移除。
那重要資料需要保留怎麼辦?其實就只要把 StorageClass 改為 csi-cinder-sc-retain
,遇到 PVC 被刪除,PV 也不會跟著被刪除。
cinder-csi-plugin
雖然最後有時測上去有成功,但是 liveness 一直自己回應 HTTP 500,還會斷線,但 PVC 這樣測試下來目前都沒有碰到問題,甚至我也用 Service 測試連線了,也都是回傳 OK,沒有跳出錯誤。
基本儲存也具備,那我們就可以來建立監控服務了!
本系列內容也會同步貼到我的 Blog https://blog.yangjerry.tw 歡迎來我的 Blog 點一下 RSS 追蹤,那我們就下一篇文章見啦!